package com.neuedu.corejava.ch5;

/**
 * 基本数据类型与引用数据类型在方法调用时的差别
 * @author admin
 *
 */

public class ReferenceParameter {

	public void  change(int a) {//参数是基本数据类型
		a=12;
		System.out.println("in method "+a);
	}
	
	public void change(String str) {//参数是一个对象类型，引用数据类型
		str="int method ";
		System.out.println(str);
	}
	
	public void  change(int[]array) {//数组是一个引用数据类型
		array[0]=9;//修改数组内部的数据会影响实参的数据值，没有对数组重新赋值
		for(int i: array){
			System.out.print(i+"\t");
		}
		System.out.println();
	}
	
	public void change2(int[]array){//数组是一个引用数据类型
		array=new int[]{2,3,4,5};//修改数组的引用，重新对数组进赋值操作，方法内部的修改不会影响到方法外部
		for(int i:array){
			System.out.print(i+"\t");
		}
		System.out.println();
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ReferenceParameter rp=new ReferenceParameter();
		//1.基本数据类型
		int a=10;
		rp.change(a);//传值调用
		System.out.println("after change "+a);
		
		String str="Hello 引用数据类型";
		rp.change(str);//传引用调用，传递的参数是一个引用数据类型；
		System.out.println("after change "+str);
		
		int[] array=new int[]{1,2,3,4};
		rp.change(array);//传引用调用，传递参数是一个引用数据类型
		for(int k:array){
			System.out.print(k+"\t");
		}
		System.out.println();
		
		array=new int[]{1,2,3,4};
		rp.change2(array);//传引用调用，传递参数是一个引用数据类型，在方法内部修改引用，不影响方法外面（实参）
		for(int k:array){
			System.out.print(k+"\t");
		}
		System.out.println();

	}

}
